import {getLogin,getUserInfo,getUserDetailById} from '@/api/user'
import { setToken,getToken, removeToken } from '@/utils/auth'


const state = {
  // 储存token
  // token:''
  // token:localStorage.getItem('token')||''
  token:getToken()||'',
  userInfo:{}
}
const mutations = {
  // 修改state只能执行同步修改
  setToken(state,payload){
    // mutations默认得到两个参数state对象，被调用时传入的参数payload
    state.token=payload

    setToken(payload)
  },

  setUserInfo(state,payload){
    state.userInfo=payload
  },
  // 退出登录功能
  logout(state){
    // 每当退出都要将token和用户数据清理掉
    removeToken()
    state.token=''
    state.userInfo={}
  }
}
const actions = {
  // 异步可以封装在actions当中
  async login(context,payload){
    console.log('action封装 发送请求')
    // 这个叫做login的actions属性是一个函数
    // 需要调用同名api login发送请求
    // 每个actions默认都有context当前模块，payload传入数据，一两个参数
    const res=await getLogin(payload)
    // console.log(res.data.data)
     // 因为拦截器已经输出了深层 res.data.data, 这里接到数据直接用即可
    console.log('这里是响应的数据res',res)
    console.log(res);
    // 利用第一个参数模块实例的commit方法调用mutations
    context.commit('setToken',res)

    // 主动处理tooken失效
    // 为了主动监听，咱们在登录成功后，将时间记下来
    // const now=Date.now()
    // localStorage.setItem('time',now)
    // 再跳到导航守卫搞

  },

  async getUserInfo(context){
    const res=await getUserInfo()
    console.log('登录账号基本信息',res)

    // 这里是页面进来导航守卫调用的actions
    // 获取登录账号基本信息，但是缺了头像，现在用另外接口补上
    const detail=await getUserDetailById(res.userId)
    console.log('根据基本员工userId获取更详细内容',detail)
    // 最后将基本信息和详细信息合并，一起放入vuex state用
    // 将原来两个对象数据都展开，合并成一个对象使用
    const userInfo={
      ...res,
      ...detail
    }
    context.commit('setUserInfo',res)
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}